home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Programming / Programming Languages / UCB Logo 3.0 / CSLS / crypto < prev    next >
Text File  |  1993-08-05  |  7KB  |  319 lines

  1. TO ALPHABET :STRING
  2. IF EMPTYP :STRING [STOP]
  3. IF NAMEP THING FIRST :STRING [LIGHT THING FIRST :STRING]
  4. ALPHABET BF :STRING
  5. END
  6.  
  7. TO BEEP
  8. TONE 440 15
  9. END
  10.  
  11. TO BIND :FROM :TO
  12. IF NOT NAMEP :FROM [BEEP STOP]
  13. IF NAMEP WORD "BOUND :TO [BEEP STOP]
  14. IF NAMEP THING :FROM [DARK THING :FROM]
  15. MAKE :FROM :TO
  16. FIXHIST :FROM
  17. IF NAMEP :TO [LIGHT :TO]
  18. SHOWCLEAR :TEXT
  19. END
  20.  
  21. TO BINDLOOP
  22. PARSEKEY RC
  23. BINDLOOP
  24. END
  25.  
  26. TO CLEARLET :LETTER
  27. IFELSE NAMEP :LETTER [TYPE THING :LETTER] [TYPE :LETTER]
  28. END
  29.  
  30. TO CLEARTYPE :WORD
  31. IF EMPTYP :WORD [STOP]
  32. CLEARLET FIRST :WORD
  33. CLEARTYPE BF :WORD
  34. END
  35.  
  36. TO CLEARWORD :ROW :COL :WORD
  37. SETCURSOR LIST :COL :ROW+1
  38. CLEARTYPE :WORD
  39. END
  40.  
  41. TO CNT :LETTER
  42. OUTPUT THING (WORD "CNT :LETTER)
  43. END
  44.  
  45. TO CODEWORD :ROW :COL :WORD
  46. SETCURSOR LIST :COL :ROW
  47. INVTYPE :WORD
  48. END
  49.  
  50. TO COUNT. :WORD
  51. OUTPUT THING (WORD "COUNT. :WORD)
  52. END
  53.  
  54. TO CRYPTO :TEXT
  55. MAKE "FULLTEXT :TEXT
  56. MAKE "MORETEXT []
  57. MAKE "TEXTSTACK []
  58. INITVARS "A "Z
  59. MAKE "MAXCOUNT 0
  60. INITCOUNT "SINGLE
  61. INITCOUNT "TRIPLE
  62. CT
  63. HISTOGRAM :TEXT
  64. REDISPLAY "FALSE
  65. IF OR GUESS.SINGLE GUESS.TRIPLE [SHOWCLEAR :TEXT]
  66. BINDLOOP
  67. END
  68.  
  69. TO DARK :LETTER
  70. SETCURSOR LIST 6+(ASCII :LETTER)-(ASCII "A) 6
  71. TYPE :LETTER
  72. ERN WORD "BOUND :LETTER
  73. END
  74.  
  75. TO FIXHIST :LETTER
  76. SETCURSOR THING WORD "POS :LETTER
  77. ONEHIST :LETTER
  78. END
  79.  
  80. TO FULLCLEAR
  81. CT
  82. SHOWCLEAR1 0 0 :FULLTEXT 1
  83. PR []
  84. INVTYPE [TYPE ANY CHAR TO REDISPLAY]
  85. IGNORE RC
  86. REDISPLAY "TRUE
  87. END
  88.  
  89. TO GUESS.SINGLE
  90. IF EMPTYP :LIST.SINGLE [OP "FALSE]
  91. IF EMPTYP BF :LIST.SINGLE [QBIND FIRST :LIST.SINGLE "A OP "TRUE]
  92. QBIND :MAX.SINGLE "A
  93. QBIND (IFELSE EQUALP FIRST :LIST.SINGLE :MAX.SINGLE ~
  94.                      [LAST :LIST.SINGLE] [FIRST :LIST.SINGLE]) "I
  95. OP "TRUE
  96. END
  97.  
  98. TO GUESS.TRIPLE
  99. IF EMPTYP :LIST.TRIPLE [OP "FALSE]
  100. IF :MAXCOUNT < (3+CNT LAST :MAX.TRIPLE)     ~
  101.       [QBIND FIRST :MAX.TRIPLE "T     ~
  102.        QBIND FIRST BF :MAX.TRIPLE "H     ~
  103.        QBIND LAST :MAX.TRIPLE "E     ~
  104.        OP "TRUE]
  105. OP "FALSE
  106. END
  107.  
  108. TO HISTCHAR :CHAR
  109. IF NAMEP :CHAR [HISTLET :CHAR OP :CHAR]
  110. OP "
  111. END
  112.  
  113. TO HISTLET :LETTER
  114. LOCAL "CNT
  115. MAKE "CNT 1+CNT :LETTER
  116. SETCURSOR LIST (ASCII :LETTER)-(ASCII "A) (NONNEG 24-:CNT)
  117. TYPE :LETTER
  118. SETCNT :LETTER :CNT
  119. IF :MAXCOUNT < :CNT [MAKE "MAXCOUNT :CNT]
  120. END
  121.  
  122. TO HISTOGRAM :TEXT
  123. IF EMPTYP :TEXT [STOP]
  124. PREPARE.GUESS HISTWORD FIRST :TEXT
  125. HISTOGRAM BF :TEXT
  126. END
  127.  
  128. TO HISTWORD :WORD
  129. IF EMPTYP :WORD [OP " ]
  130. OP WORD HISTCHAR FIRST :WORD HISTWORD BF :WORD
  131. END
  132.  
  133. TO INITCOUNT :TYPE
  134. SETLIST. :TYPE []
  135. SETCOUNT. :TYPE 0
  136. END
  137.  
  138. TO INITVARS :FROM :TO
  139. SETCNT :FROM 0
  140. MAKE :FROM "| |
  141. IF NAMEP WORD "BOUND :FROM [ERN WORD "BOUND :FROM]
  142. IF EQUALP :FROM :TO [STOP]
  143. INITVARS CHAR 1+ASCII :FROM :TO
  144. END
  145.  
  146. TO INVTYPE :TEXT
  147. TYPE STANDOUT :TEXT
  148. END
  149.  
  150. TO LESSTEXT
  151. IF EMPTYP :TEXTSTACK [STOP]
  152. MAKE "TEXT FIRST :TEXTSTACK
  153. MAKE "TEXTSTACK BF :TEXTSTACK
  154. REDISPLAY "TRUE
  155. END
  156.  
  157. TO LIGHT :LETTER
  158. SETCURSOR LIST 6+(ASCII :LETTER)-(ASCII "A) 6
  159. INVTYPE :LETTER
  160. MAKE WORD "BOUND :LETTER "TRUE
  161. END
  162.  
  163. TO LIST. :WORD
  164. OUTPUT THING (WORD "LIST. :WORD)
  165. END
  166.  
  167. TO MORETEXT
  168. IF EMPTYP :MORETEXT [STOP]
  169. MAKE "TEXTSTACK FPUT :TEXT :TEXTSTACK
  170. MAKE "TEXT :MORETEXT
  171. REDISPLAY "TRUE
  172. END
  173.  
  174. TO NONNEG :NUMBER
  175. OP IFELSE :NUMBER < 0 [0] [:NUMBER]
  176. END
  177.  
  178. TO ONEHIST :LETTER
  179. POST (WORD :LETTER "- TWOCOL CNT :LETTER "- THING :LETTER) ~
  180.        CNT :LETTER
  181. TYPE "| |
  182. END
  183.  
  184. TO PARSEKEY :CHAR
  185. IF :CHAR = "@ [FULLCLEAR STOP]
  186. IF :CHAR = "+ [MORETEXT STOP]
  187. IF :CHAR = "- [LESSTEXT STOP]
  188. BIND :CHAR RC
  189. END
  190.  
  191. TO POST :TEXT :COUNT
  192. IF :COUNT = 0 [TYPE WORD FIRST :TEXT "|     | STOP]
  193. IFELSE :MAXCOUNT < :COUNT+3 [INVTYPE :TEXT] [TYPE :TEXT]
  194. END
  195.  
  196. TO PREPARE.GUESS :WORD
  197. IF EQUALP COUNT :WORD 1 [TALLY "SINGLE :WORD]
  198. IF EQUALP COUNT :WORD 3 [TALLY "TRIPLE :WORD]
  199. END
  200.  
  201. TO QBIND :FROM :TO
  202. IF NAMEP THING :FROM [STOP]
  203. MAKE :FROM :TO
  204. FIXHIST :FROM
  205. LIGHT :TO
  206. END
  207.  
  208. TO REDISPLAY :FLAG
  209. CT
  210. SHOWHIST
  211. SETCURSOR [6 6]
  212. TYPE "ABCDEFGHIJKLMNOPQRSTUVWXYZ
  213. IF :FLAG [ALPHABET "ABCDEFGHIJKLMNOPQRSTUVWXYZ]
  214. SHOWCODE :TEXT
  215. IF :FLAG [SHOWCLEAR :TEXT]
  216. END
  217.  
  218. TO SETCNT :LETTER :THING
  219. MAKE (WORD "CNT :LETTER) :THING
  220. END
  221.  
  222. TO SETCOUNT. :WORD :THING
  223. MAKE (WORD "COUNT. :WORD) :THING
  224. END
  225.  
  226. TO SETLIST. :WORD :THING
  227. MAKE (WORD "LIST. :WORD) :THING
  228. END
  229.  
  230. TO SHOWCLEAR :TEXT
  231. SHOWCLEAR1 8 0 :TEXT 2
  232. END
  233.  
  234. TO SHOWCLEAR1 :ROW :COL :TEXT :DELTA
  235. IF EMPTYP :TEXT [STOP]
  236. IF :ROW > 23 [STOP]
  237. IF KEYP [STOP]
  238. IF (:COL+COUNT FIRST :TEXT) > 37 ~
  239.    [SHOWCLEAR1 :ROW+:DELTA 0 :TEXT :DELTA STOP]
  240. CLEARWORD :ROW :COL FIRST :TEXT
  241. SHOWCLEAR1 :ROW (:COL+1+COUNT FIRST :TEXT) BF :TEXT :DELTA
  242. END
  243.  
  244. TO SHOWCODE :TEXT
  245. MAKE "MORETEXT []
  246. SHOWCODE1 8 0 :TEXT
  247. END
  248.  
  249. TO SHOWCODE1 :ROW :COL :TEXT
  250. IF EMPTYP :TEXT [MAKE "MORETEXT [] STOP]
  251. IF :ROW > 22 [STOP]
  252. IF AND EQUALP :ROW 16 EQUALP :COL 0 [MAKE "MORETEXT :TEXT]
  253. IF (:COL+COUNT FIRST :TEXT) > 37 [SHOWCODE1 :ROW+2 0 :TEXT STOP]
  254. CODEWORD :ROW :COL FIRST :TEXT
  255. SHOWCODE1 :ROW (:COL+1+COUNT FIRST :TEXT) BF :TEXT
  256. END
  257.  
  258. TO SHOWHIST
  259. SHOWROW 0 "A 5
  260. SHOWROW 1 "F 5
  261. SHOWROW 2 "K 5
  262. SHOWROW 3 "P 5
  263. SHOWROW 4 "U 5
  264. SHOWROW 5 "Z 1
  265. END
  266.  
  267. TO SHOWROW :ROW :LETTER :NUM
  268. SETCURSOR LIST 0 :ROW
  269. SHOWROW1 :LETTER :NUM :ROW 0
  270. END
  271.  
  272. TO SHOWROW1 :LETTER :NUM :ROW :COL
  273. IF :NUM = 0 [STOP]
  274. MAKE WORD "POS :LETTER LIST :COL :ROW
  275. ONEHIST :LETTER
  276. SHOWROW1 CHAR 1+ASCII :LETTER :NUM-1 :ROW :COL+7
  277. END
  278.  
  279. TO TALLY :TYPE :WORD
  280. LOCAL "THIS
  281. MAKE "THIS WORD :TYPE :WORD
  282. IF NOT MEMBERP :WORD LIST. :TYPE ~
  283.      [SETLIST. :TYPE FPUT :WORD LIST. :TYPE MAKE :THIS 0]
  284. MAKE :THIS SUM 1 THING :THIS
  285. MAKE "THIS THING :THIS
  286. IF :THIS > (COUNT. :TYPE) ~
  287.      [SETCOUNT. :TYPE :THIS MAKE (WORD "MAX. :TYPE) :WORD]
  288. END
  289.  
  290. TO TWOCOL :NUMBER
  291. IF :NUMBER > 9 [OP :NUMBER]
  292. OP WORD 0 :NUMBER
  293. END
  294.  
  295.  
  296. MAKE "CGRAM1 [DZYNUFQYJULLI, JPQHQ OK YR HOXPJ QNZEUJORY QCEQWJ XHRTOYX ~
  297.    ZW OYJR U TRHJPTPOLQ TRHLN. OYNQQN, RZH QCEQKKOGQ ERYEQHY TOJP ~
  298.    WHRVLQFK RD QNZEUJORY UJ WHQKQYJ KOFWLI FQUYK JPUJ JPQ |XHRTY-ZWK| NR ~
  299.    YRJ PUGQ KZEP U TRHLN. U NQEQYJ QNZEUJORY UOFK UJ, WHQWUHQK DRH, U ~
  300.    FRHQ TRHJPTPOLQ DZJZHQ, TOJP U NODDQHQYJ ERFFZYOJI KWOHOJ, NODDQHQYJ ~
  301.    REEZWUJORYK, UYN FRHQ HQUL ZJOLOJI JPUY UJJUOYOYX KJUJZK UYN KULUHI.]
  302. MAKE "CGRAM2 [LVO VFKP LFZJ MD OPAXFLIMN IZ LM GITOKFLO FNP ZLKONBLVON F ~
  303.    HMALV'Z INILIFLIUO, FNP FL LVO ZFYO LIYO LM ZOO LM IL LVFL VO JNMWZ ~
  304.    WVFL IZ NOXOZZFKH LM XMCO WILV LVO MNBMINB FXLIUILIOZ FNP XAGLAKO MD ~
  305.    ZMXIOLH, ZM LVFL VIZ INILIFLIUO XFN TO KOGOUFNL. IL IZ FTZAKP LM ~
  306.    LVINJ LVFL LVIZ LFZJ XFN TO FXXMYCGIZVOP TH ZM YAXV ZILLINB IN F TMS ~
  307.    DFXINB DKMNL, YFNICAGFLINB ZHYTMGZ FL LVO PIKOXLIMN MD PIZLFNL ~
  308.    FPYINIZLKFLMKZ. LVIZ IZ KFLVOK F WFH LM KOBIYONL FNP TKFINWFZV.]
  309. MAKE "CGRAM3 [PCODL HBDCX QXDRDLH YIHCODR, HBD RZBIIER GXD LIH ZIYQDHDLH ~
  310.    HI HDGZB GWHBDLHCZ ECHDXGZF, XDGNCLP GR G YDGLR IA ECUDXGHCIL GLN ~
  311.    ZWEHCOGHCIL. GLN C NIWUH HBGH YIRH IA WR JBI RDXCIWREF XDGN GLN JXCHD ~
  312.    HBD DLPECRB EGLPWGPD DODX EDGXLDN CH UF HBD XIWHD IA "XWL, RQIH, XWL" ~
  313.    HI RCEGR YGXLDX.]
  314. MAKE "CGRAM4 [JW BTN XNSGSYP EJKE GFEBBCG, DTYJBN FBCCSKSG, RYU FBCCSKSG ~
  315.    NSWCSFPSU PES USGJNS, WNSSUBA, RYU WTPTNS BW PES QBTYK, PESNS ZBTCU ~
  316.    LS YB KNRUJYK, YB PSGPJYK SVFSXP RG R PSRFEJYK ASPEBU, RYU YB ~
  317.    LCRFILBRNU DTYKCSG. JY WRFP, ZS RNS KSPPJYK CBFIGPSX GFESUTCJYK RYU ~
  318.    KNRUJYK PB PES XBJYP BW PBNPTNS.]
  319.